home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Risc World 3
/
Risc World 3.iso
/
SOFTWARE
/
ISSUE6
/
PD
/
PDF
/
pdf
/
c++
/
PrintDialog
< prev
next >
Wrap
Text File
|
2003-01-21
|
11KB
|
365 lines
#include "Printer.h"
#include "PrintDialog.h"
#include "DocView.h"
#include "Document.h"
#include "GuiTargets.h"
#include "UserEvents.h"
#include "GuiGadget.h"
#include "strstream.h"
#include <stdlib.h>
#include "guiTask.h"
#include "NumberField.h"
#include "fstream.h"
#include "ChoicesFilePath.h"
#include "uCompare.h"
class PrintSetup
{
public:
PrintSetup(GuiWindow& printDialog);
void getFlags(int &flags);
private:
GuiWindow mainWin;
GuiWindow& printDialog;
GuiOptionButton reversesSheets;
GuiOptionButton turnsPaperOver;
GuiOptionButton isCollate;
GuiOptionButton isLandscape;
int flags;
GUI_DECLARE_EVENT_TARGETS(PrintSetup);
GuiToolboxTarget showTarget;
Claim show(GuiToolboxEvent&,const GuiIdBlock&);
GuiToolboxTarget setTarget;
Claim set(GuiToolboxEvent&,const GuiIdBlock&);
GuiToolboxTarget saveTarget;
Claim save(GuiToolboxEvent&,const GuiIdBlock&);
};
//*************************************************************************
PrintSetup::PrintSetup(GuiWindow& prDialog)
: mainWin("printSetup"),
printDialog(prDialog),
reversesSheets(mainWin,1),
turnsPaperOver(mainWin,4),
isCollate(mainWin,5),
isLandscape(mainWin,0x1e),
flags(PrintData::IS_COLLATE),
showTarget(&printDialog,User_PrintShowSetup,this,PrintSetup::show),
setTarget(&mainWin,User_PrintSetSetup,this,PrintSetup::set),
saveTarget(&mainWin,User_PrintSaveSetup,this,PrintSetup::save)
{
string file=getChoicesFilePath("PrintSetup");
char buf[128];
ifstream in(file.c_str());
if (!in) return;
while (in.getline(buf,sizeof(buf)))
{
if (uStartsWith(buf,"Reverse:")) { if (buf[8]=='1') flags |= PrintData::IS_REVERSES_SHEETS; }
else if (uStartsWith(buf,"TurnsOver:")) { if (buf[10]=='1') flags |= PrintData::IS_TURNS_PAPER_OVER; }
else if (uStartsWith(buf,"Collate:")) { if (buf[8]=='0') flags &= ~PrintData::IS_COLLATE; }
else if (uStartsWith(buf,"Landscape:")) { if (buf[10]=='1') flags |= PrintData::IS_LANDSCAPE;}
}
}
//*************************************************************************
void PrintSetup::getFlags(int& f)
{
f &=~ (PrintData::IS_REVERSES_SHEETS |
PrintData::IS_TURNS_PAPER_OVER |
PrintData::IS_COLLATE |
PrintData::IS_LANDSCAPE
);
f |=flags;
}
//*************************************************************************
Claim PrintSetup::show(GuiToolboxEvent&,const GuiIdBlock&)
{
mainWin.showAsMenuCentred(printDialog,&printDialog);
reversesSheets.set(flags & PrintData::IS_REVERSES_SHEETS);
turnsPaperOver.set(flags & PrintData::IS_TURNS_PAPER_OVER);
isCollate.set(flags & PrintData::IS_COLLATE);
isLandscape.set(flags & PrintData::IS_LANDSCAPE);
return CLAIM;
}
//*************************************************************************
Claim PrintSetup::set(GuiToolboxEvent& ev,const GuiIdBlock&)
{
flags = (reversesSheets.isOn()?PrintData::IS_REVERSES_SHEETS:0);
flags |= (turnsPaperOver.isOn()?PrintData::IS_TURNS_PAPER_OVER:0);
flags |= (isCollate.isOn()?PrintData::IS_COLLATE:0);
flags |= (isLandscape.isOn()?PrintData::IS_LANDSCAPE:0);
ev.eventCode=User_PrintDialogOpen;
GuiTask::raiseEvent(mainWin,ev);
return CLAIM;
}
//*************************************************************************
Claim PrintSetup::save(GuiToolboxEvent& ev,const GuiIdBlock& idBlock)
{
set(ev,idBlock);
string file=getChoicesFilePath("PrintSetup");
ofstream out(file.c_str());
if (!out) return CLAIM;
out << "Reverse:" << (flags & PrintData::IS_REVERSES_SHEETS ? '1': '0') << endl
<< "TurnsOver:" << (flags & PrintData::IS_TURNS_PAPER_OVER ? '1': '0') << endl
<< "Collate:" << (flags & PrintData::IS_COLLATE ? '1': '0') << endl
<< "Landscape:" << (flags & PrintData::IS_LANDSCAPE ? '1': '0') << endl;
return CLAIM;
}
//*************************************************************************
//*************************************************************************
//*************************************************************************
class PrintDialog
{
public:
friend bool PrintDialog_open(DocView& view, GuiWindow& ancestor, int page);
bool open(DocView& view,GuiWindow& ancestor,int page);
private:
GuiWindow mainWin;
PrintSetup printSetup;
GuiRadioButton isAll;
GuiRadioButton isFrom;
NumberField from;
NumberField to;
GuiNumberRange copies;
GuiOptionButton isDoubleSided;
GuiOptionButton isSide2;
GuiOptionButton isStartEnd;
GuiOptionButton isPamphlet;
GuiOptionButton isSectionSize;
GuiLabel startLabel;
NumberField start;
GuiLabel endLabel;
NumberField end;
GuiLabel pageLabel;
GuiLabel sectionSizeLabel;
NumberField sectionSize;
GuiLabel sheetsLabel;
PrintData data;
PrintDialog();
~PrintDialog();
void storeValues();
void showValues();
void fade();
GUI_DECLARE_EVENT_TARGETS(PrintDialog);
GuiToolboxTarget cancelTarget;
Claim cancel(GuiToolboxEvent&,const GuiIdBlock&);
GuiToolboxTarget setTarget;
Claim set(GuiToolboxEvent&,const GuiIdBlock&);
GuiToolboxTarget printTarget;
Claim print(GuiToolboxEvent&,const GuiIdBlock&);
GuiToolboxTarget fadeDialogTarget;
Claim fadeDialog(GuiToolboxEvent&,const GuiIdBlock&);
GuiNullTarget nullTarget;
void printWait();
};
//*************************************************************************
PrintDialog::PrintDialog()
: mainWin("print"),
printSetup(mainWin),
isAll(mainWin,0),
isFrom(mainWin,1),
from(mainWin,0xa),
to(mainWin,0x4),
copies(mainWin,0x19),
isDoubleSided(mainWin,0x80),
isSide2(mainWin,0x90),
isStartEnd(mainWin,0x93),
isPamphlet(mainWin,0x86),
isSectionSize(mainWin,0x94),
startLabel(mainWin,0x88),
start(mainWin,0x89),
endLabel(mainWin,0x8a),
end(mainWin,0x8b),
pageLabel(mainWin,0x92),
sectionSizeLabel(mainWin,0x8d),
sectionSize(mainWin,0x8e),
sheetsLabel(mainWin,0x8f),
cancelTarget(&mainWin,User_PrintDialogCancel,this,PrintDialog::cancel),
setTarget(&mainWin,User_PrintDialogSet,this,PrintDialog::set),
printTarget(&mainWin,User_PrintDialogPrint,this,PrintDialog::print),
fadeDialogTarget(&mainWin,User_PrintDialogFade,this,PrintDialog::fadeDialog)
{
storeValues();
}
//*************************************************************************
PrintDialog::~PrintDialog() {}
//*************************************************************************
bool PrintDialog::open(DocView& view, GuiWindow& ancestor,int page)
{
mainWin.showAsMenuCentred(ancestor,&ancestor);
char* name=0;
if (!_swix(PDriver_Info,_OUT(4),&name) && name) mainWin.setTitle(name);
showValues();
// isAll.select();
data.from=page;
from.setNumber(page);
data.to=page;
to.setNumber(page);
data.document=&view.getDocument();
data.viewChoices=view.getChoices();
fade();
return 1;
}
//*************************************************************************
void PrintDialog::fade()
{
bool fade=isAll.isSelected();
from.fade(fade);
to.fade(fade);
fade=!isDoubleSided.isOn();
isSide2.fade(fade);
isStartEnd.fade(fade);
bool startfade=(fade || !isStartEnd.isOn());
startLabel.fade(startfade);
start.fade(startfade);
endLabel.fade(startfade);
end.fade(startfade);
pageLabel.fade(startfade);
isPamphlet.fade(fade);
if (!fade) fade=!isPamphlet.isOn();
isSectionSize.fade(fade);
if (!fade) fade=!isSectionSize.isOn();
sectionSizeLabel.fade(fade);
sectionSize.fade(fade);
sheetsLabel.fade(fade);
}
//*************************************************************************
Claim PrintDialog::cancel(GuiToolboxEvent&,const GuiIdBlock&)
{
showValues();
return CLAIM;
}
//*************************************************************************
Claim PrintDialog::set(GuiToolboxEvent&,const GuiIdBlock&)
{
storeValues();
return CLAIM;
}
//*************************************************************************
Claim PrintDialog::print(GuiToolboxEvent&,const GuiIdBlock&)
{
storeValues();
mainWin.hide();
nullTarget(this,PrintDialog::printWait); //wait for window to dissappear
return CLAIM;
}
//*************************************************************************
void PrintDialog::printWait()
{
nullTarget.destroy();
printSetup.getFlags(data.flags);
Printer_print(data);
}
//*************************************************************************
void PrintDialog::storeValues()
{
data.copies = copies.getValue();
data.flags = (isAll.isSelected() ? PrintData::IS_ALL : 0) |
(isDoubleSided.isOn() ? PrintData::IS_DOUBLE_SIDED : 0) |
(isSide2.isOn() ? PrintData::IS_SIDE2 : 0) |
(isStartEnd.isOn() ? PrintData::IS_START_END : 0) |
(isPamphlet.isOn() ? PrintData::IS_PAMPHLET : 0) |
(isSectionSize.isOn() ? PrintData::IS_SECTION_SIZE : 0);
data.from = from.getNumber();
data.to = to.getNumber();
data.start = start.getNumber();
data.end = end.getNumber();
data.sectionSize = sectionSize.getNumber();
}
//*************************************************************************
void PrintDialog::showValues()
{
copies.setValue(data.copies);
if (data.flags & PrintData::IS_ALL) isAll.select(); else isFrom.select();
isDoubleSided.set(data.flags & PrintData::IS_DOUBLE_SIDED);
isSide2.set(data.flags & PrintData::IS_SIDE2);
isStartEnd.set(data.flags & PrintData::IS_START_END);
isPamphlet.set(data.flags & PrintData::IS_PAMPHLET);
isSectionSize.set(data.flags & PrintData::IS_SECTION_SIZE);
from.setNumber(data.from);
to.setNumber(data.to);
start.setNumber(data.start);
end.setNumber(data.end);
sectionSize.setNumber(data.sectionSize);
fade();
}
//*************************************************************************
Claim PrintDialog::fadeDialog(GuiToolboxEvent&,const GuiIdBlock&)
{
fade();
return CLAIM;
}
//*************************************************************************
//*************************************************************************
//*************************************************************************
bool PrintDialog_open(DocView& view, GuiWindow& ancestor, int page)
{
static PrintDialog p;
return p.open(view,ancestor,page);
}